package com.haoze.nurse.service;

import com.haoze.common.response.Result;
import com.haoze.nurse.dto.Assembly;
import com.haoze.nurse.dto.MedicalDTO;
import com.haoze.nurse.dto.RoleTypeEntity;
import com.haoze.nurse.dto.WardSummaryDTO;
import com.haoze.nurse.vo.NurseFile;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface NurseFileService {

    /**
     * 医疗术语  复合字典
     */
    String COMPOSE_DICT = "compose_dict";
    /**
     * 单选类型
     */
    String TYPE_SIGNLE_SELECTION = "6";
    /**
     * 多选类型
     */
    String TYPE_MULTIPLE_SELECTION = "7";
    /**
     * 医疗术语
     */
    String TYPE_MEDICAL = "20";


    String PROFILE_DEV = "dev";
    /**
     * 保存护理记录
     *
     * @param nurseFile
     * @return
     */
    Result save(NurseFile nurseFile);

    /**
     * 编辑保存护理记录
     *
     * @param nurseFile
     * @return
     */
    Result editSave(NurseFile nurseFile);

    /**
     * 分页获取记录单列表记录（如每个人只有一张单子的特殊类型，作为数组唯一数据返回）
     *
     * @param page
     * @param size
     * @param inpatNum
     * @param recordType
     * @param orderType
     * @return
     */
    Result getFileList(String page, String size, String inpatNum, String recordType, String beginTime, String endTime,String orderType);

    /**
     * 分页获取记录单列表记录（如每个人只有一张单子的特殊类型，作为数组唯一数据返回）
     *
     * @param page
     * @param size
     * @param inpatNum
     * @param recordType
     * @return
     */
    Result getPrintFileList(String page, String size, String inpatNum, String recordType, String beginTime, String endTime);

    /**
     * 创建病人指定类型记录单
     *
     * @param inpatNum
     * @param recordType
     * @return
     */
    Result createNewRecord(String inpatNum, String recordType);

    /**
     * 根据记录编号删除一条记录
     *
     * @param map
     * @return
     */
    Result deleteOneRecord(Map map);

    /**
     * 获取一条记录
     *
     * @param fileDataId
     * @return
     */
    Result getOneRecord(String fileDataId, String inpatNum, String recordType);

    /**
     * 获取一条记录
     *
     * @param inpatNum
     * @param recordType
     * @return
     */
    Result queryRegisterBirthData(String inpatNum, String recordType);

    /**
     * 绑定数据元varCode
     *
     * @param map
     * @return
     */
    Result bondVarcode(Map<String, String> map);

    /**
     * 获取婴儿Apgar评分
     *
     * @return
     */
    Result getApgarScore(String inpatNum);

    /**
     * 删除出入量总结记录
     *
     * @return
     */
    Result deleteSummaryRecord(Map<String, String> map);

    Result isSummary(Map<String, String> map);

    /**
     * 出入量总结
     *
     * @return
     */
    Result createInputOutputSummary(Map<String, String> map);

    /**
     * 签名
     *
     * @param loginName
     * @param userPwd
     * @return
     */
    Result sign(String loginName, String userPwd,String fileDataId);

    /**
     * 获取模板详情（返回节点）
     *
     * @param tplDetailId
     * @return
     */
    Result getTplDetail(String tplDetailId, String inpatNum, String recordType);

    /**
     * 获取规则
     *
     * @param inpatNum   住院号
     * @param recordTime 时间节点
     * @param recordType 记录类型
     * @param varCode    varCode
     * @return
     */
    Result getRule(String inpatNum, String recordTime, String recordType, String varCode);

    /**
     * 获取打印记录总量
     *
     * @param inpatNum
     * @param recordType
     * @return
     */
    Result getPrintFileSum(String inpatNum, String recordType, String beginTime, String endTime);

    Result getFileIndexId(String inpatNum, String recordType);

    Result getAllRemarks(String emrFileId, Integer type);

    Result getOtherPipes(String type, String emrFileId);

    /**
     * 保存备注(旧)
     * @param type
     * @param fileIndexId
     * @param name
     * @return
     */
    Result saveRemark(String type, String fileIndexId, String name);

    /**
     * 删除备注(旧)
     * @param fileIndexId
     * @param type
     * @param name
     * @return
     */
    Result deleteRemark(String fileIndexId, String type, String name);

    List<Map<String, String>> querySelections(String elementId, String word, String dataCode, int page, int pageSize, String parentSerial, String varCode, String wardId,String isWeight);

    /**
     * 转换数据 2.0-2.1
     *
     * @param inpatNum
     * @return
     */
    Result transData(String inpatNum);

    /**
     * 根据名称搜索血制品
     *
     * @param searchName
     * @return
     */
    List<Map<String, String>> searchBlood(String searchName);


    /**
     * 获取Apgar评分
     *
     * @param inpatNum
     * @return
     */
    Result getApgarRecord(String inpatNum);

    List<Assembly> associateByWords(String word, String varCode);

    List<String> getUnits(String elementId);

    Result getCatalog(String deptId, String inpatNum);

    /**
     * 获取当前系统时间
     * @return
     */
    Result getCurrSystime();

    List<MedicalDTO> dynamicCascade(String medicalId, String dataRelationIds, String numberValue);

    Result getModifyLocation(String recordType,String inpatNum);

    /**
     * 获取备注
     * @param recordType
     * @param inpatNum
     * @return
     */
    Result getRemark(String recordType, String inpatNum);

    Result searchName(String searchName);

    /**
     * 删除备注
     * @param tplDetailId
     * @param recordType
     * @param inpatNum
     * @param name
     * @return
     */
    Result delRemark(String tplDetailId, String recordType, String inpatNum, String name);

    Result getAssess(String varCode);

    /**
     * 根据字典值获取对应的评估模板是否创建子节点
     * @param basicValueId
     * @return
     */
    Result ownTemplate(String basicValueId);

    Result medicalTree(RoleTypeEntity roleTypeEntity);

    Result getFormListByUser();

    Result wardDeptSummary(WardSummaryDTO dto);

    Result wardDeptSummaryDetail(WardSummaryDTO dto);

    Result list(Map param);

    /**
     * 获取护理单位
     * @return
     */
    Result getCareUnit();
}
